/// *! ******************************************************************************
// *
// * Pentaho Data Integration
// *
// * Copyright (C) 2002-2017 by Hitachi Vantara : http://www.pentaho.com
// *
// *******************************************************************************
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with
// * the License. You may obtain a copy of the License at
// *
// * http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// *
// ******************************************************************************/
// package org.pentaho.di.ui.trans.steps.missing;
//
// import cn.hutool.core.bean.BeanUtil;
// import cn.hutool.core.collection.CollectionUtil;
// import cn.hutool.core.io.FileUtil;
// import cn.hutool.core.lang.func.Func0;
// import cn.hutool.core.util.ObjectUtil;
// import cn.hutool.core.util.StrUtil;
// import cn.hutool.json.JSONArray;
// import cn.hutool.json.JSONObject;
// import cn.hutool.json.JSONUtil;
// import com.google.common.collect.Lists;
// import com.google.common.collect.Maps;
// import lombok.SneakyThrows;
// import org.apache.commons.collections.CollectionUtils;
// import org.apache.commons.lang.StringUtils;
// import org.dom4j.DocumentException;
// import org.dom4j.Element;
// import org.dom4j.io.OutputFormat;
// import org.dom4j.io.SAXReader;
// import org.dom4j.io.XMLWriter;
// import org.eclipse.swt.SWT;
// import org.eclipse.swt.custom.ScrolledComposite;
// import org.eclipse.swt.events.SelectionAdapter;
// import org.eclipse.swt.events.SelectionEvent;
// import org.eclipse.swt.events.ShellAdapter;
// import org.eclipse.swt.events.ShellEvent;
// import org.eclipse.swt.graphics.Color;
// import org.eclipse.swt.graphics.Font;
// import org.eclipse.swt.graphics.FontData;
// import org.eclipse.swt.layout.FormAttachment;
// import org.eclipse.swt.layout.FormData;
// import org.eclipse.swt.layout.FormLayout;
// import org.eclipse.swt.widgets.*;
// import org.pentaho.di.base.AbstractMeta;
// import org.pentaho.di.core.Const;
// import org.pentaho.di.core.constant.NetUrl;
// import org.pentaho.di.core.decrypt.utils.JarValidate;
// import org.pentaho.di.core.dictionary.Dic;
// import org.pentaho.di.core.dictionary.DicDao;
// import org.pentaho.di.core.dictionary.DicEntity;
// import org.pentaho.di.core.exception.LaniusEngineDbException;
// import org.pentaho.di.core.exception.KettleException;
// import org.pentaho.di.core.net.HttpResponse;
// import org.pentaho.di.core.net.HttpUtil;
// import org.pentaho.di.core.plugins.DatabasePluginType;
// import org.pentaho.di.core.plugins.PluginInterface;
// import org.pentaho.di.core.plugins.PluginRegistry;
// import org.pentaho.di.core.plugins.metastore.*;
// import org.pentaho.di.core.plugins.service.PluginErrorRecordService;
// import org.pentaho.di.core.user.service.UserService;
// import org.pentaho.di.core.util.LogUtil;
// import org.pentaho.di.i18n.BaseMessages;
// import org.pentaho.di.repository.LongObjectId;
// import org.pentaho.di.repository.ObjectId;
// import org.pentaho.di.repository.Repository;
// import org.pentaho.di.repository.RepositoryDirectoryInterface;
// import org.pentaho.di.trans.TransMeta;
// import org.pentaho.di.trans.step.BaseStepMeta;
// import org.pentaho.di.trans.step.StepDialogInterface;
// import org.pentaho.di.trans.step.StepMeta;
// import org.pentaho.di.trans.step.StepMetaInterface;
// import org.pentaho.di.trans.steps.missing.MissingTrans;
// import org.pentaho.di.ui.core.PropsUI;
// import org.pentaho.di.ui.core.gui.GUIResource;
// import org.pentaho.di.ui.dbdto.PluginBuyInfoVo;
// import org.pentaho.di.ui.spoon.Spoon;
// import org.pentaho.di.ui.spoon.TabItemInterface;
// import org.yzbdl.lanius.spoon.market.service.MissingTransInstallService;
// import org.pentaho.di.ui.spoon.trans.TransGraph;
// import org.pentaho.di.ui.trans.step.BaseStepDialog;
// import org.pentaho.di.ui.trans.steps.listener.MissDialogUiListener;
// import org.pentaho.di.ui.trans.steps.missing.listener.ClientListener;
//
// import java.io.*;
// import java.lang.reflect.Method;
// import java.math.BigDecimal;
// import java.util.List;
// import java.util.*;
// import java.util.stream.Collectors;
//
/// **
// * @author Administrator
// */
//
// public class MissingTransDialog extends BaseStepDialog implements StepDialogInterface {
//
// private UserService userService = UserService.getInstance();
//
// private static UserCenter userCenter = UserCenter.getInstance();
//
// private DicDao dicDao = DicDao.getInstance();
//
// private static final int dialogWidth = 650;
// private static final int minErrorLabelHeight = 70;
// private static final int maxErrorLabelHeight = 900;
// private static final int contentMargin = 150;
// private static final int initMarain = 23;
// private static int id = SWT.YES;
// public static Integer missTransSize;
// private static final int buttonLineHeight = 30;
// private static final int buttonLines = 3 * 2;
// BigDecimal sum = null;
// HashMap<String, Object> pluginMap = null;
// public static final int MISSING_TRANS_STEPS = 1;
// private static Class<?> PKG = MissingTransDialog.class;//单元测试
// final Spoon spoon = Spoon.getInstance();
// private Shell shell;
// private Shell shellParent;
// private int mode;
// private PropsUI props;
// private String stepResult;
// private String fileName;
// private Composite mainPanel;
// private ScrolledComposite scrollpane;
// private Button defaultAgreeBtn, selectBtn, downloadAllBtn;
// private Button protocalButton;
// private Group pluginGroup;
// private Label downloadLb;
// private FormData fdPluginGroup, selectBtnFd, downloadAllBtnFd;
// private Color sysBlack =(Spoon.getInstance()==null? null:new Color(Spoon.getInstance().getDisplay(), 22, 155,
/// 233));//单元测试
// private TransGraph activeTransGraph =(spoon==null?null: spoon.getActiveTransGraph());//单元测试
//
// public List<Map<String, Object>> missTransList;
//
// public List<Map<String, Object>> errorList = new ArrayList<>();
//
// private PluginErrorRecordService pluginErrorRecordService = PluginErrorRecordService.getInstance();
//
// private List<Map<String, Object>> listBtn = new ArrayList<>();
//
//
// public MissingTransDialog(Shell parent, List<MissingTrans> missingTrans, StepMetaInterface baseStepMeta,
// TransMeta transMeta, String stepname) {
// super(parent, baseStepMeta, transMeta, stepname);
// this.shellParent = parent;
// this.mode = MISSING_TRANS_STEPS;
// }
//
// public MissingTransDialog(Shell parent, List<MissingTrans> missingTrans, StepMetaInterface baseStepMeta,
// TransMeta transMeta, String stepname, String fileName) {
// super(parent, baseStepMeta, transMeta, stepname);
// this.shellParent = parent;
// this.mode = MISSING_TRANS_STEPS;
// this.fileName = fileName;
// loadMissTrans(transMeta);
// }
//
// public MissingTransDialog(Shell parent, List<MissingTrans> missingTrans, StepMetaInterface baseStepMeta,
// TransMeta transMeta, String stepname, String fileName, List<Map<String, Object>> missingTransList) {
// super(parent, baseStepMeta, transMeta, stepname);
// this.shellParent = parent;
// this.mode = MISSING_TRANS_STEPS;
// this.fileName = fileName;
// this.missTransList = missingTransList;
// this.missTransSize = missingTransList.size();
// if (CollectionUtil.isEmpty(missingTransList)) {
// loadMissTrans(transMeta);
// }
// }
//
// public MissingTransDialog(Shell parent, Object in, TransMeta transMeta, String stepname) {
// super(parent, (BaseStepMeta) in, transMeta, stepname);
// this.shellParent = parent;
// this.mode = MISSING_TRANS_STEPS;
// loadMissTrans(transMeta);
// }
//
// /**
// * 加载缺失的插件信息
// *
// * @param transMeta
// */
// public void loadMissTrans(TransMeta transMeta) {
// try {
// missTransList = Lists.newArrayList();
// HashMap<String, Object> map = Maps.newHashMap();
// map.put("transName", transMeta.getName());
// CheckResultDto results = Spoon.getInstance().checkResults(transMeta.getXML(), transMeta.getFilename(), transMeta);
// if (results != null && results.getIsLanius()) {
// map.put("client", Const.PRODUCT_NAME);
// } else {
// map.put("client", "pentaho");
// }
// if (CollectionUtil.isNotEmpty(transMeta.getMissingTrans())) {
// map.put("missTransList", transMeta.getMissingTrans());
// }
// map.put("transMeta", transMeta);
// missTransList.add(map);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
//
// /**
// * 拼接错误的插件信息
// *
// * @param missingTrans
// * @param mode
// * @return
// */
// private List<Button> getErrorMessage(List<MissingTrans> missingTrans, int mode, Button downloadBtn, String transType,
/// TransMeta transMeta, int marginHeight) {
// try {
// List<Button> missingPluginList = new ArrayList<>();
// //整理插件相关信息
// if (mode == MISSING_TRANS_STEPS) {
// ArrayList<Map<String, Object>> missPluginList = Lists.newArrayList();
// //获取缺失的数据库插件信息
// List<Map<String, Object>> dataBaseList = getDataBase(transMeta);
// CheckResultDto checkResultDto = null;
// try {
// checkResultDto = Spoon.getInstance().checkResults(transMeta.getXML(), transMeta.getFilename(), transMeta);
// } catch (Exception ex) {
// }
// if (CollectionUtils.isNotEmpty(missingTrans)) {
// for (MissingTrans entry : missingTrans) {
// Map<String, Object> missPlugin = Maps.newHashMap();
// PluginIdMatchInfoEntity pluginIdMatch = PluginIdMatchInfoDao.getInstance().getOne(entry.getMissingPluginId());
// if (null != pluginIdMatch && transType.equals("pentaho")) {
// missPlugin.put("message", " 插件: " + entry.getStepName() + "(" + entry.getParentStepMeta().getVersion() + ") ----> " +
/// pluginIdMatch.getLaniusPluginId() + "(" + pluginIdMatch.getLaniusPluginVersion() + ") \n");
// missPlugin.put("pluginId", entry.getMissingPluginId());
// missPluginList.add(missPlugin);
// } else {
// missPlugin.put("pluginName", entry.getStepName());
// missPlugin.put("pluginId", entry.getMissingPluginId());
// missPlugin.put("version", entry.getParentStepMeta().getVersion());
// missPluginList.add(missPlugin);
// }
// }
// if (CollectionUtils.isNotEmpty(dataBaseList)) {
// missPluginList.addAll(dataBaseList);
// }
// if (checkResultDto != null) {
// if (CollectionUtils.isNotEmpty(checkResultDto.getMessages())) {
// for (String message : checkResultDto.getMessages()) {
// Map<String, Object> missPlugin = Maps.newHashMap();
// missPlugin.put("message", message);
// missPluginList.add(missPlugin);
// }
// }
// }
// }
// //请求后台接口
// //拼接请求参数
// Set set = new HashSet<String>();
// for (Map<String, Object> map : missPluginList) {
// String pluginId = (String) map.get("pluginId");
// set.add(pluginId);
// }
// String jsonString = JSONUtil.toJsonStr(set);
// if (set.size() > 0) {
// HttpResponse httpResponse = HttpUtil.postJson(NetUrl.PLUGIN_LIST_CHARGE_TYPE + "?type=Step", jsonString);
// JSONObject jsonObject = JSONUtil.parseObj(httpResponse.body());
// Object code = jsonObject.get("code");
// //定义一个Map 存储后台返回的信息
// HashMap<String, Object> map = Maps.newHashMap();
// if (code.equals("001000")) {
// JSONArray data = (JSONArray) jsonObject.get("data");
// for (Object object : data) {
// JSONObject pluginMap = (JSONObject) object;
// map.put((String) pluginMap.get("plugin_meta_id"), pluginMap);
// }
// for (int i = 0; i < missPluginList.size(); i++) {
// Object message = missPluginList.get(i).get("message");
// if (message != null) {
// Link attrLink = new Link(pluginGroup, SWT.NONE);
// attrLink.setText("" + message);
// FormData linkErrorFd = new FormData();
// linkErrorFd.left = new FormAttachment(0, 30);
// if (i == 0) {
// linkErrorFd.top = new FormAttachment(0, marginHeight + 25);
// } else {
// linkErrorFd.top = new FormAttachment(0, marginHeight + 25);
// }
// attrLink.setLayoutData(linkErrorFd);
// marginHeight += 20;
// props.setLook(attrLink);
// } else {
// JSONObject pluginInfo = (JSONObject) map.get(missPluginList.get(i).get("pluginId") + "");
// Button button = new Button(pluginGroup, SWT.CHECK);
// if (transType.equals("pentaho")) {
// button.setEnabled(false);
// selectBtn.setEnabled(false);
// } else {
// button.setEnabled(true);
// selectBtn.setEnabled(true);
// }
// missingPluginList.add(button);
// Link linkBtn = new Link(pluginGroup, SWT.NONE);
// FormData protocalFormData = new FormData();
//
// protocalFormData.left = new FormAttachment(0, 0);
// protocalFormData.width = 17;
// protocalFormData.height = buttonLineHeight;
// props.setLook(linkBtn);
// props.setLook(button);
// FormData linkFormData = new FormData();
// linkFormData.left = new FormAttachment(button, 5);
// Integer chargeType = 0;
// if (BeanUtil.isNotEmpty(pluginInfo)) {
// button.setData(pluginInfo);
// chargeType = (Integer) pluginInfo.get("charge_type");
// BigDecimal integral = new BigDecimal(0.00);
// if (ObjectUtil.isNotEmpty(pluginInfo.get("integral"))) {
// integral = new BigDecimal((Double) pluginInfo.get("integral"));
// }
//// BigDecimal integral = (BigDecimal) pluginInfo.get("integral");
// if (chargeType == 0) {
// linkBtn.setText("插件：" + (missPluginList.get(i).get("pluginName") == null ? missPluginList.get(i).get("pluginId") :
/// missPluginList.get(i).get("pluginName")) + "(" + missPluginList.get(i).get("version") + ") 免费");
// } else {
// linkBtn.setText("插件：" + (missPluginList.get(i).get("pluginName") == null ? missPluginList.get(i).get("pluginId") :
/// missPluginList.get(i).get("pluginName")) + "(" + missPluginList.get(i).get("version") + ") " + integral + " 积分");
// }
// } else {
// linkBtn.setText("插件：" + (missPluginList.get(i).get("pluginName") == null ? missPluginList.get(i).get("pluginId") :
/// missPluginList.get(i).get("pluginName")) + "(" + missPluginList.get(i).get("version") + ") 免费");
// }
// if (i == 0) {
// protocalFormData.top = new FormAttachment(0, marginHeight + 25);
// linkFormData.top = new FormAttachment(0, marginHeight + 30);
// } else {
// protocalFormData.top = new FormAttachment(0, marginHeight + 25);
// linkFormData.top = new FormAttachment(0, marginHeight + 30);
// }
// button.setLayoutData(protocalFormData);
// linkBtn.setLayoutData(linkFormData);
// marginHeight += 25;
// button.addSelectionListener(new PointAdapter());
// }
//
// }
//
// }
// }
//
// }
// return missingPluginList;
//
// } catch (Exception e) {
// e.printStackTrace();
// }
// return null;
// }
//
// /**
// * 获取缺失的数据库插件
// *
// * @param transMeta
// */
// public static List<Map<String, Object>> getDataBase(TransMeta transMeta) {
//
// try {
// List<Map<String, Object>> databaseList = Lists.newArrayList();
// //获取文档对象
// SAXReader reader = new SAXReader();
// org.dom4j.Document doc = null;
// InputStream is = null;
// if (transMeta.getRepository() != null) {
// List<Map<String, Object>> missDataBases = transMeta.getMissDataBases();
// if (CollectionUtils.isNotEmpty(missDataBases)) {
// databaseList.addAll(missDataBases);
// }
// } else {
// doc = reader.read(new File(transMeta.getFilename()));
// //获取根元素
// Element root = doc.getRootElement();
// List<Element> elementList = root.elements("connection");
// for (Element element : elementList) {
// HashMap<String, Object> map = Maps.newHashMap();
// String pluginId = element.elementTextTrim("type");
// String verison = element.elementTextTrim("version");
// if (StringUtils.isBlank(verison)) {
// verison = Const.DEFAULT_VERSION;
// }
// PluginRegistry registry = PluginRegistry.getInstance();
// PluginInterface plugin = registry.getPlugin(DatabasePluginType.class, pluginId, verison);
// map.put("pluginId", pluginId);
// map.put("version", verison);
// Boolean flage = Boolean.TRUE;
// if (null == plugin) {
// for (Map<String, Object> dataBaseInfo : databaseList) {
// String databaseType = (String) dataBaseInfo.get("pluginId");
// if (databaseType.equals(pluginId)) {
// flage = Boolean.FALSE;
// }
// }
// if (flage) {
// databaseList.add(map);
// }
// }
// }
// }
// for (int i = 0; i < databaseList.size(); i++) {
// Map<String, Object> missDataBase = databaseList.get(i);
// String pluginId = (String) missDataBase.get("pluginId");
// String version = (String) missDataBase.get("version");
// PluginEntity pluginEntity = PluginDao.getInstance().getLocalVersionOne(pluginId, version);
// if (pluginEntity != null) {
// databaseList.remove(i);
// }
// }
// return databaseList;
// } catch (DocumentException | LaniusEngineDbException e) {
// e.printStackTrace();
// }
// return null;
// }
//
// /**
// * 获取滚动条高度
// *
// * @param missingTransList
// * @return
// */
// private int getScrollLabelHeight(List<Map<String, Object>> missingTransList) {
// return missingTransList == null ? 80 : (missingTransList.size() + 4) * 52;
// }
//
// /**
// * 获取滚动条高度
// *
// * @param size
// * @return
// */
// private int getContentHeight(int size) {
// return size == 0 ? 80 : (size + 2) * 25;
// }
//
// public String open() {
// //定义一个标识，用于处理重复打开次窗口的逻辑
// Spoon.missDialog = "转换";
// Spoon.missTransList = new ArrayList<>();
// //主面板 -------start
// this.props = PropsUI.getInstance();
// Display display = shellParent.getDisplay();
// shell = new Shell(shellParent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | SWT.MIN | SWT.APPLICATION_MODAL);
// props.setLook(shell);
// shell.setImage(GUIResource.getInstance().getImageSpoon());
//
//
// int scrollLabelHeight = getScrollLabelHeight(missTransList);
// if (scrollLabelHeight < minErrorLabelHeight) {
// scrollLabelHeight = minErrorLabelHeight;
// }
// if (scrollLabelHeight > maxErrorLabelHeight) {
// scrollLabelHeight = maxErrorLabelHeight;
// }
//
// int dialogCalHeight = scrollLabelHeight + buttonLineHeight * buttonLines;
//
// int parentWidth = shellParent.getBounds().width;
// int parentHeight = shellParent.getBounds().height;
// int parentX = shellParent.getBounds().x;
// int parentY = shellParent.getBounds().y;
// int xPoint = parentX + (parentWidth - dialogWidth) / 2;
// int yPoint = parentY + (parentHeight - dialogCalHeight) / 2;
// shell.setBounds(xPoint, yPoint, dialogWidth, dialogCalHeight);
// shell.setText(BaseMessages.getString(PKG, "MissingTransDialog.MissingPlugins"));
//
// FormLayout formLayout = new FormLayout();
// formLayout.marginWidth = Const.FORM_MARGIN;
// formLayout.marginHeight = Const.FORM_MARGIN;
//
// shell.setLayout(formLayout);
// shell.setText(BaseMessages.getString(PKG, "MissingTransDialog.MissingPlugins"));
// Label errorMsg = new Label(shell, SWT.LEFT);
// errorMsg.setText(BaseMessages.getString(PKG, "MissingTransDialog.MissingTransSteps"));
// props.setLook(errorMsg);
// FormData fdErrorMsg = new FormData();
// fdErrorMsg.left = new FormAttachment(0, 0);
// Label noteLabel = new Label(shell, SWT.LEFT);
//
// noteLabel.setText(BaseMessages.getString(PKG, "MissingTransDialog.NOTE"));
// noteLabel.setForeground(sysBlack);
// props.setLook(noteLabel);
// FormData fdNoteLabel = new FormData();
// fdNoteLabel.left = new FormAttachment(0, 0);
// fdNoteLabel.top = new FormAttachment(errorMsg, 0);
// noteLabel.setLayoutData(fdNoteLabel);
// //添加关闭窗口的事件
// shell.addShellListener(new ShellAdapter() {
// @Override
// public void shellClosed(ShellEvent shellEvent) {
// shell.dispose();
// stepResult = null;
// Spoon.missDialog = "";
// super.shellClosed(shellEvent);
// }
// });
// // 主面板 ----------end
//
// //填充滚动面板
// //滚动面板 start
// scrollpane = new ScrolledComposite(shell, SWT.BORDER | SWT.V_SCROLL);
// FormData scrollFormData = new FormData();
// scrollFormData.left = new FormAttachment(0, 0); // To the right of the label
// scrollFormData.top = new FormAttachment(noteLabel, 0);
// scrollFormData.right = new FormAttachment(100, 0);
// scrollFormData.height = scrollLabelHeight;
// scrollpane.setLayoutData(scrollFormData);
// scrollpane.setExpandVertical(true);
// scrollpane.setExpandHorizontal(true);
// scrollpane.setAlwaysShowScrollBars(true);
//
// mainPanel = new Composite(scrollpane, SWT.NONE);
// scrollpane.setSize(dialogWidth, scrollLabelHeight);
// scrollpane.setContent(mainPanel);
// FormLayout mainPanelFl = new FormLayout();
// mainPanelFl.marginWidth = 5;
// mainPanelFl.marginHeight = 5;
// mainPanel.setLayout(mainPanelFl);
//
// props.setLook(mainPanel);
//
//
// //添加错误记录到本地数据库
// List<MissingTrans> missingTrans = transMeta.getMissingTrans();
// if (CollectionUtils.isNotEmpty(missingTrans)) {
// for (MissingTrans trans : missingTrans) {
// PluginErrorRecordEntity pluginErrorRecordEntity = pluginErrorRecordService.getOne(trans.getMissingPluginId());
// //添加过记录后 就不在继续添加
// if (null == pluginErrorRecordEntity) {
// pluginErrorRecordService.addMissingPluginRecord(fileName, trans.getMissingPluginId(), "trans");
// }
// }
// }
// // ----start 协议
// protocalButton = new Button(shell, SWT.CHECK);
// props.setLook(protocalButton);
// FormData protocalFormData = new FormData();
// protocalFormData.top = new FormAttachment(scrollpane, 0);
// protocalFormData.left = new FormAttachment(0, 40);
// protocalFormData.width = 17;
// protocalFormData.height = buttonLineHeight;
// protocalButton.setLayoutData(protocalFormData);
//// protocalButton.setSelection(Convert.toBool(dicDao.getOnlyOne(Dic.DEFAULT_CHECK_PROTOCAL_DOWNLOAD_PLUGIN.name()).getDicValue()));
// protocalButton.setSelection(true);
// Link linkBtn = new Link(shell, SWT.NONE);
// props.setLook(linkBtn);
// FormData linkFormData = new FormData();
// linkFormData.top = new FormAttachment(scrollpane, 5);
// linkFormData.left = new FormAttachment(0, 57);
// linkFormData.width = dialogWidth;
// linkFormData.height = buttonLineHeight;
// linkBtn.setText("<A>同意Lanius插件下载协议</A>");
// linkBtn.setLayoutData(linkFormData);
//
// defaultAgreeBtn = new Button(shell, SWT.CHECK);
// props.setLook(defaultAgreeBtn);
// FormData defaultAgreeFormData = new FormData();
// defaultAgreeFormData.top = new FormAttachment(scrollpane, 25);
// defaultAgreeFormData.left = new FormAttachment(0, 40);
// defaultAgreeFormData.width = dialogWidth;
// defaultAgreeFormData.height = buttonLineHeight;
// defaultAgreeBtn.setText("&此计算机默认勾选此协议");
// defaultAgreeBtn.setSelection(true);
// defaultAgreeBtn.setVisible(false);
// defaultAgreeBtn.setLayoutData(defaultAgreeFormData);
// selectBtn = new Button(shell, SWT.CHECK);
// selectBtn.setText("全选/反选");
// props.setLook(selectBtn);
// selectBtnFd = new FormData();
// selectBtnFd.top = new FormAttachment(scrollpane, 55);
// selectBtnFd.left = new FormAttachment(0, 40);
// selectBtn.setLayoutData(selectBtnFd);
//
// //一键下载
// downloadAllBtn = new Button(shell, SWT.PUSH);
// downloadAllBtn.setText("一键下载");
// props.setLook(downloadAllBtn);
// if (missTransList.size() < 2) {
// downloadAllBtn.setVisible(false);
// downloadLb = new Label(shell, SWT.NONE);
// downloadLb.setText("当前选中插件预计需要0积分");
// props.setLook(downloadLb);
// FormData downloadLBfd = new FormData(300, 25);
// downloadLBfd.top = new FormAttachment(scrollpane, 53);
// downloadLBfd.left = new FormAttachment(selectBtn, 15);
// downloadLb.setLayoutData(downloadLBfd);
// } else {
// downloadAllBtnFd = new FormData(75, 20);
// downloadAllBtnFd.top = new FormAttachment(scrollpane, 53);
// downloadAllBtnFd.left = new FormAttachment(selectBtn, 15);
// downloadAllBtn.setLayoutData(downloadAllBtnFd);
// downloadLb = new Label(shell, SWT.NONE);
// downloadLb.setText("当前选中插件预计需要0积分");
// props.setLook(downloadLb);
// FormData downloadLBfd = new FormData(300, 25);
// downloadLBfd.top = new FormAttachment(scrollpane, 53);
// downloadLBfd.left = new FormAttachment(downloadAllBtn, 15);
// downloadLb.setLayoutData(downloadLBfd);
// }
//
//
// selectBtn.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected(SelectionEvent selectionEvent) {
// missTransSize = missTransList.size();
// Control[] children = pluginGroup.getChildren();
// for (Control child : children) {
// if (child instanceof Button) {
// Button button = (Button) child;
// String text = button.getText();
// if (StringUtils.isBlank(text)) {
// if (button.getEnabled()) {
// if (selectBtn.getSelection()) {
// button.setSelection(true);
// } else {
// button.setSelection(false);
// }
// }
// }
// }
// }
// sum = new BigDecimal(0);
// pluginMap = Maps.newHashMap();
// for (Control child : children) {
// if (child instanceof Button) {
// Button button = (Button) child;
// if (button.getSelection()) {
// if (button.getData() != null) {
// JSONObject data = (JSONObject) button.getData();
// pluginMap.put((String) data.get("plugin_meta_id"), data);
// }
// }
// }
// }
// for (String entry : pluginMap.keySet()) {
// if (!userService.isLogin()) {
// userCenter.login(new Func0<Object>() {
// @Override
// public Object call() throws Exception {
// JSONObject data = (JSONObject) pluginMap.get(entry);
// BigDecimal integral = new BigDecimal(0);
// if (ObjectUtil.isNotEmpty(data.get("integral"))) {
// integral = new BigDecimal((Double) data.get("integral"));
// }
// if (!isBuyAlreadyByPluginMetaid(entry)) {
// sum = sum.add(integral);
// }
// return null;
// }
// });
// } else {
// JSONObject data = (JSONObject) pluginMap.get(entry);
// BigDecimal integral = new BigDecimal(0);
// if (ObjectUtil.isNotEmpty(data.get("integral"))) {
// integral = new BigDecimal((Double) data.get("integral"));
// }
// if (!isBuyAlreadyByPluginMetaid(entry)) {
// sum = sum.add(integral);
// }
//
// }
//
// }
// downloadLb.setText("当前选中插件预计需要" + sum + "积分");
// super.widgetSelected(selectionEvent);
// }
// });
// protocalButton.addSelectionListener(new SelectionAdapter() {
// public void widgetSelected(SelectionEvent event) {
//
// if (!protocalButton.getSelection()) {
// for (Map<String, Object> button : listBtn) {
// Set<Map.Entry<String, Object>> entries = button.entrySet();
// for (Map.Entry<String, Object> entry : entries) {
// Button btn = (Button) entry.getValue();
// btn.setEnabled(false);
// }
// }
// } else {
// for (Map<String, Object> button : listBtn) {
// Set<Map.Entry<String, Object>> entries = button.entrySet();
// for (Map.Entry<String, Object> entry : entries) {
// String key = entry.getKey();
// Button btn = (Button) entry.getValue();
// if (key.equals("pentaho")) {
// btn.setEnabled(false);
// } else {
// btn.setEnabled(true);
// }
// }
// }
// }
// defaultAgreeBtn.setSelection(protocalButton.getSelection());
// defaultAgreeBtn.setVisible(protocalButton.getSelection());
// }
// });
//
// linkBtn.addSelectionListener(new SelectionAdapter() {
// public void widgetSelected(SelectionEvent event) {
// try {
// Runtime.getRuntime().exec(
// "rundll32 url.dll,FileProtocolHandler " + NetUrl.PLUGIN_DOWNLOAD_PROTOCAL);
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// });
// // ----end 协议
// refreshList(display, scrollLabelHeight, noteLabel, sysBlack, false);
//
// //设置面板大小
// mainPanel.setSize(mainPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
// scrollpane.setMinSize(mainPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
// BaseStepDialog.setSize(shell, dialogWidth, minErrorLabelHeight, false);
// shell.open();
// return stepResult;
// }
//
// /**
// * 最近打开插件的UI
// *
// * @param display 显示设备
// * @param scrollLabelHeight 滚动标签高度
// * @param noteLabel 描述标签
// * @param sysBlack 系统颜色
// */
// public void refreshList(Display display, int scrollLabelHeight, Label noteLabel, Color sysBlack, Boolean flage) {
// if (mainPanel != null && !mainPanel.isDisposed()) {
// pluginGroup = new Group(mainPanel, SWT.V_SCROLL | SWT.H_SCROLL);
// FormLayout pluginGroupLayout = new FormLayout();
// pluginGroupLayout.marginWidth = 10;
// pluginGroupLayout.marginHeight = 10;
// pluginGroup.setLayout(pluginGroupLayout);
// fdPluginGroup = new FormData();
// fdPluginGroup.left = new FormAttachment(0, 0);
// fdPluginGroup.top = new FormAttachment(noteLabel, 0);
// fdPluginGroup.right = new FormAttachment(100, 0);
// pluginGroup.setLayoutData(fdPluginGroup);
// //滚动面板 end
// //构建转换列表
// int marginNum = 1;
//
// //记录无插件缺失的转换数量
// for (int i = 0; i < missTransList.size(); i++) {
// TransMeta newTransMeta = null;
// Map<String, Object> transInfo = missTransList.get(i);
// try {
// TransMeta transMeta = (TransMeta) transInfo.get("transMeta");
// newTransMeta = loadTransMeta(transMeta);
// } catch (Exception e) {
// LogUtil.warn("尝试保存临时文件");
// }
// //动态处理每一行的高度
// List<Map<String, Object>> dataBaseList = null;
// dataBaseList = getDataBase(newTransMeta);
// if (newTransMeta.hasMissingPlugins() || CollectionUtil.isNotEmpty(dataBaseList)) {
// if (pluginGroup.getChildren() != null && pluginGroup.getChildren().length != 0) {
// marginNum = getMarginNum(marginNum, i, missTransList);
// }
// final TransMeta downloadTransMeta = newTransMeta;
// /**转换名字[容器]**/
// Label transName = new Label(pluginGroup, SWT.WRAP);
// FontData newFontData = transName.getFont().getFontData()[0];
// newFontData.setStyle(SWT.BOLD);
// newFontData.setHeight(12);
// Font newFont = new Font(display, newFontData);
// transName.setText(transInfo.get("transName").toString());
// transName.setFont(newFont);
// FormData fdPluginNameCompLabel = new FormData();
// fdPluginNameCompLabel.top = new FormAttachment(0, marginNum);
// fdPluginNameCompLabel.left = new FormAttachment(0, 2);
// transName.setLayoutData(fdPluginNameCompLabel);
// props.setLook(transName);
//
// /**客户端类型[容器]**/
// Label clientLabel = new Label(pluginGroup, SWT.WRAP);
// ClientListener clientListener = null;
// if (flage) {
// clientListener = new ClientListener(shellParent, Const.PRODUCT_NAME);
// } else {
// clientListener = new ClientListener(shellParent, transInfo.get("client").toString());
// }
// clientLabel.addPaintListener(clientListener);
// props.setLook(clientLabel);
// FormData fdClientLabel = new FormData(90, 25);
// fdClientLabel.top = new FormAttachment(0, marginNum - 5);
// fdClientLabel.left = new FormAttachment(transName, 0);
// clientLabel.setLayoutData(fdClientLabel);
// //按钮组
//
// /**下载按钮[容器]**/
// Button downloadBtn = new Button(pluginGroup, SWT.PUSH);
// Button switchBtn = new Button(pluginGroup, SWT.PUSH);
// Button ignoreBtn = new Button(pluginGroup, SWT.PUSH);
//
// downloadBtn.setText("下载");
// downloadBtn.setForeground(new Color(display, 74, 89, 120));
// FormData fddDownloadBtn = new FormData(60, 25);
// fddDownloadBtn.top = new FormAttachment(0, marginNum);
// fddDownloadBtn.right = new FormAttachment(100, -131);
// downloadBtn.setLayoutData(fddDownloadBtn);
// Map<String, Object> buttonMap = Maps.newHashMap();
// buttonMap.put(transInfo.get("client").toString(), downloadBtn);
// listBtn.add(buttonMap);
//
//
// /**切换按钮[容器]**/
// switchBtn.setText("切换");
// FormData fdSwitchBtn = new FormData(60, 25);
// fdSwitchBtn.top = new FormAttachment(0, marginNum);
// fdSwitchBtn.left = new FormAttachment(downloadBtn, -1);
// fdSwitchBtn.right = new FormAttachment(100, -65);
// switchBtn.setLayoutData(fdSwitchBtn);
//
// /**忽略[容器]**/
// ignoreBtn.setText("忽略");
// FormData fdIgnoreBtn = new FormData(60, 25);
// fdIgnoreBtn.top = new FormAttachment(0, marginNum);
// fdIgnoreBtn.left = new FormAttachment(switchBtn, -1);
// fdIgnoreBtn.right = new FormAttachment(100, -5);
//
// ignoreBtn.setLayoutData(fdIgnoreBtn);
//
//
// /**横线[容器]**/
// Label lineLable = new Label(pluginGroup, SWT.SEPARATOR | SWT.HORIZONTAL);
// lineLable.setFont(new Font(display, "微软雅黑", 9, SWT.NORMAL));
// lineLable.setForeground(new Color(display, 74, 89, 120));
// FormData fdLineLable = new FormData();
// fdLineLable.top = new FormAttachment(transName, 1);
// fdLineLable.left = new FormAttachment(0, Const.MARGIN);
// fdLineLable.right = new FormAttachment(100, -Const.MARGIN);
// lineLable.setLayoutData(fdLineLable);
//
// /**缺失插件名称[容器]**/
// Label error = new Label(pluginGroup, SWT.NONE);
// props.setLook(error);
// String client = transInfo.get("client").toString();
// List<Button> missPluginBtnList = getErrorMessage(newTransMeta.getMissingTrans(), mode, downloadBtn, client,
/// newTransMeta, marginNum);
//// error.setText(errorMessage);
// FormData fdError = new FormData();
// fdError.top = new FormAttachment(transName, 0);
// error.setLayoutData(fdError);
// Map<String, Object> map = new HashMap<String, Object>();
// map.put("label", error);
// map.put("missTrans", newTransMeta.getMissingTrans());
// map.put("coordinate", i);
// map.put("missTransMap", transInfo);
// errorList.add(map);
// int finalI = i;
// ignoreBtn.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected(SelectionEvent selectionEvent) {
// missTransList.remove(finalI);
// if (missTransList.size() == 0) {
// shell.close();
// return;
// }
// pluginGroup.dispose();
// refreshList(shellParent.getDisplay(), scrollLabelHeight, noteLabel, sysBlack, false);
// mainPanel.layout();
// pluginGroup.layout();
// super.widgetSelected(selectionEvent);
// }
// });
// if (client.equals(Const.PRODUCT_NAME) || flage) {
// switchBtn.setEnabled(false);
// if (protocalButton.getSelection() && defaultAgreeBtn.getSelection()) {
// downloadBtn.setEnabled(true);
// }
// } else {
// downloadBtn.setEnabled(false);
// }
//// int finalMarginNum = marginNum;
// ClientListener finalClientListener = clientListener;
// TransMeta finalNewTransMeta = newTransMeta;
// switchBtn.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected(SelectionEvent selectionEvent) {
// try {
// //版本切换
// selectBtn.setEnabled(true);
// switchVersion(downloadBtn, switchBtn, clientLabel, finalClientListener, finalNewTransMeta, missPluginBtnList);
// } catch (Exception e) {
// LogUtil.error(e.getMessage());
// }
// super.widgetSelected(selectionEvent);
// }
// });
//
// downloadBtn.addSelectionListener(new SelectionAdapter() {
// public void widgetSelected(SelectionEvent e) {
// TabItemInterface activeTabitem = Spoon.getInstance().getActiveTabitem();
// if (activeTabitem.hasContentChanged()) {
// MessageBox mb = new MessageBox(shellParent, SWT.OK);
// mb.setMessage("您有未保存的转换,请保存后再进行安装操作");
// mb.setText("提示");
// mb.open();
// return;
// }
// try {
// DicEntity one = dicDao.getOnlyOne(Dic.DEFAULT_CHECK_PROTOCAL_DOWNLOAD_PLUGIN.name());
// one.setDicValue(defaultAgreeBtn.getSelection() + "");
// dicDao.update(one);
// } catch (LaniusEngineDbException e1) {
// e1.printStackTrace();
// }
// if (protocalButton.getSelection()) {
// downloadPlugin(activeTransGraph, downloadTransMeta, downloadBtn, finalI, scrollLabelHeight, noteLabel, client);
// }
// }
// });
//
//
// downloadAllBtn.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected(SelectionEvent selectionEvent) {
// TabItemInterface activeTabitem = Spoon.getInstance().getActiveTabitem();
//// missTransSize=missTransList.size();
// if (activeTabitem.hasContentChanged()) {
// MessageBox mb = new MessageBox(shellParent, SWT.OK);
// mb.setMessage("您有未保存的转换,请保存后再进行安装操作");
// mb.setText("提示");
// mb.open();
// return;
// }
// try {
// DicEntity one = dicDao.getOnlyOne(Dic.DEFAULT_CHECK_PROTOCAL_DOWNLOAD_PLUGIN.name());
// if (mainPanel != null && !mainPanel.isDisposed()) {
// one.setDicValue(defaultAgreeBtn.getSelection() + "");
// }
// dicDao.update(one);
// } catch (LaniusEngineDbException e1) {
// e1.printStackTrace();
// }
// if (mainPanel != null && !mainPanel.isDisposed()) {
// if (protocalButton.getSelection()) {
// downloadPluginByOneKey(activeTransGraph, downloadTransMeta, downloadAllBtn, finalI, scrollLabelHeight, noteLabel,
/// client);
// }
// } else {
// downloadPluginByOneKey(activeTransGraph, downloadTransMeta, downloadAllBtn, finalI, scrollLabelHeight, noteLabel,
/// client);
// }
// }
// });
//
// } else {
//
// }
// props.setLook(pluginGroup);
// }
// }
// //如果容器的内容是空的话 直接清空
// spoon.getDisplay().asyncExec(new Runnable() {
// @Override
// public void run() {
// if (!pluginGroup.isDisposed()) {
// if (pluginGroup.getChildren() != null && pluginGroup.getChildren().length == 0) {
// shell.dispose();
// Spoon.missDialog = "";
// }
// }
// }
// });
// }
//
// /**
// * 设置获取每行的高度
// *
// * @param marginNum 高度
// * @param index 索引
// * @param missTransList 丢失转换数据
// * @return 单个转换的高度值
// */
// public int getMarginNum(int marginNum, int index, List<Map<String, Object>> missTransList) {
// if (index != 0) {
// Map<String, Object> transInfo = missTransList.get(index - 1);
// TransMeta transMeta = (TransMeta) transInfo.get("transMeta");
// //新建一个transMeta
// TransMeta newTransMeta = (TransMeta) transMeta.clone();
// marginNum += getContentHeight(newTransMeta.getMissingTrans().size());
// }
// return marginNum;
// }
//
// /**
// * 切换版本
// * @param button 按钮
// * @param switchBtn 切换按钮
// * @param clientLabel 客户端标签
// * @param clientListener 客户端监听器
// * @param aimsTransMeta 转换元数据
// * @param missPluginBthList 丢i是插件集合数据
// * @throws LaniusEngineDbException 异常数据
// */
// public void switchVersion(Button button, Button switchBtn, Label clientLabel, ClientListener clientListener,
/// TransMeta aimsTransMeta, List<Button> missPluginBthList) throws LaniusEngineDbException {
// List<PluginIdMatchInfoEntity> pluginIdMatchResList = PluginIdMatchInfoDao.getInstance().getAllEntity();
// List<PluginIdMatchSubInfoEntity> pluginIdMatchSubResList = PluginIdMatchSubInfoDao.getInstance().getAllEntity();
// //写入缓存
// List<PluginIdMatch> pluginIdMatchList = new ArrayList<>();
// for (PluginIdMatchInfoEntity pluginIdMatchInfoEntity : pluginIdMatchResList) {
// PluginIdMatch pluginIdMatch = new PluginIdMatch();
// pluginIdMatch.setLanius_plugin_id(pluginIdMatchInfoEntity.getLaniusPluginId());
// pluginIdMatch.setVersion(pluginIdMatchInfoEntity.getLaniusPluginVersion());
// pluginIdMatch.setPrimordial_plugin_id(pluginIdMatchInfoEntity.getPrimordialPluginId());
// pluginIdMatchList.add(pluginIdMatch);
// }
// PluginIdMatchDao.getInstance().setPluginIdMatchList(pluginIdMatchList);
// //同步子属性映射信息到缓存
// List<PluginIdMatchSub> pluginIdMatchSubList = new ArrayList<>();
// for (PluginIdMatchSubInfoEntity pluginIdMatchSubInfoEntity : pluginIdMatchSubResList) {
// PluginIdMatchSub pluginIdMatchSub = new PluginIdMatchSub();
// pluginIdMatchSub.setLaniusPluginAttribute(pluginIdMatchSubInfoEntity.getLaniusPluginAttribute());
// pluginIdMatchSub.setLaniusPluginVersion(pluginIdMatchSubInfoEntity.getLaniusPluginVersion());
// pluginIdMatchSub.setPrimordial_plugin_id(pluginIdMatchSubInfoEntity.getPrimordialPluginId());
// pluginIdMatchSub.setPrimordialPluginAttribute(pluginIdMatchSubInfoEntity.getPrimordialPluginAttribute());
// pluginIdMatchSubList.add(pluginIdMatchSub);
// }
// PluginIdMatchDao.getInstance().setPluginIdMatchSubList(pluginIdMatchSubList);
// try {
// CheckResultDto results = Spoon.getInstance().checkResults(aimsTransMeta.getXML(), aimsTransMeta.getFilename(),
/// aimsTransMeta);
// //资源库的版本切换。。。
// String filePath = "";
// //定义一个新转换
// TransMeta newTransMeta = new TransMeta();
// //如果是文件资源库转换
// //-- 如果是临时拖进客户端的转换
// //非临时文件
//
// if (Spoon.getInstance().getRepository() != null && aimsTransMeta.getObjectId() != null) {
// //判断是否为数据库插件
// if
/// (Spoon.getInstance().getRepository().getClass().getName().equals("org.pentaho.di.repository.filerep.KettleFileRepository"))
/// {
// Repository repository = aimsTransMeta.getRepository();
// Class<? extends Repository> repositoryClass = repository.getClass();
// Method method = repositoryClass.getDeclaredMethod("calcDirectoryName", RepositoryDirectoryInterface.class);
// method.setAccessible(true);
// String invoke = (String) method.invoke(repository, aimsTransMeta.getRepositoryDirectory());
// String filename = invoke + aimsTransMeta.getName() + ".ktr";
// File file = new File(filename);
// String appendFileType = FileUtil.getType(file);
// //窗口关闭之后执行如下操作
// String oldFileName = FileUtil.getName(filename);
// String realFileName = oldFileName.replace("." + appendFileType, "").trim();
// String parentPath = FileUtil.getParent(filename, 1);
// String newPath = parentPath + File.separator + realFileName + "_bak." + appendFileType;
// FileUtil.copy(filename, newPath, true);
// filePath = filename;
// BufferedInputStream inputStream = FileUtil.getInputStream(filename);
// updateNode(inputStream, results, "step", aimsTransMeta, filePath);
// newTransMeta = Spoon.getInstance().getRepository().loadTransformation(aimsTransMeta.getObjectId(), null);
// } else {
// //这里写数据库资源库逻辑
// //修改版本的信息
// aimsTransMeta.setExtendedDescription("software_suppliers='Lanius'");
// //修改属性映射，将处理完成的xml文件加上数据库连接重新保存即可
// Class<? extends Repository> repositoryClass = Spoon.getInstance().getRepository().getClass();
// Method getTransformationDataBaseXML = repositoryClass.getMethod("updateTransOrJobVersion", LongObjectId.class,
/// String.class);
// getTransformationDataBaseXML.invoke(Spoon.getInstance().getRepository(), aimsTransMeta.getObjectId(), "trans");
// newTransMeta = Spoon.getInstance().getRepository().loadTransformation(aimsTransMeta.getObjectId(), null);
// }
// } else {
// File file = new File(aimsTransMeta.getFilename());
// filePath = aimsTransMeta.getFilename();
// String appendFileType = FileUtil.getType(file);
// //窗口关闭之后执行如下操作
// String oldFileName = FileUtil.getName(aimsTransMeta.getFilename());
// String realFileName = oldFileName.replace("." + appendFileType, "").trim();
// String parentPath = FileUtil.getParent(aimsTransMeta.getFilename(), 1);
// String newPath = parentPath + File.separator + realFileName + "_bak." + appendFileType;
// FileUtil.copy(aimsTransMeta.getFilename(), newPath, true);
// fileName = aimsTransMeta.getFilename();
// BufferedInputStream inputStream = FileUtil.getInputStream(fileName);
// updateNode(inputStream, results, "step", aimsTransMeta, fileName);
// newTransMeta = new TransMeta(aimsTransMeta.getFilename());
// }
// newTransMeta.clearChanged();
// Spoon.getInstance().getActiveTransGraph().setTransMeta(newTransMeta);
// Spoon.getInstance().refreshGraph();
// if (CollectionUtils.isEmpty(newTransMeta.getMissingTrans())) {
// shell.dispose();
// Spoon.missDialog = "";
// return;
// }
// protocalButton.setSelection(true);
// defaultAgreeBtn.setSelection(true);
// button.setEnabled(true);
// switchBtn.setEnabled(false);
// clientLabel.removePaintListener(clientListener);
// clientLabel.addPaintListener(new ClientListener(shellParent, Const.PRODUCT_NAME));
// clientLabel.redraw();
// if (CollectionUtils.isNotEmpty(missPluginBthList)) {
// for (Button missPluginBtn : missPluginBthList) {
// missPluginBtn.setEnabled(true);
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
//
//
// /**
// * 更新ktr文件
// * @param inputStream 输入流
// * @param filePath 文件路径
// * @param checkResultDto 版本切换需要映射的数据
// * @param type 转换作业类型
// */
// public void updateNode(BufferedInputStream inputStream, CheckResultDto checkResultDto, String type, TransMeta
/// transMeta, String filePath) {
// try {
// //获取文档对象
// SAXReader reader = new SAXReader();
// org.dom4j.Document doc = reader.read(inputStream);
// //获取根元素
// Element root = doc.getRootElement();
// root.addAttribute(Const.SUPPLIERS, Const.PRODUCT_NAME);
// List<Element> stepList = root.elements(type);
// //遍历step 先修改映射属性
// for (Element element : stepList) {
// //获取插件ID
// String pluginId = element.elementTextTrim("type");
// //遍历结果集
// List<Map<String, Object>> checkResult = checkResultDto.getCheckResult();
// for (Map<String, Object> result : checkResult) {
// Set<Map.Entry<String, Object>> entries = result.entrySet();
// for (Map.Entry<String, Object> entry : entries) {
// String key = entry.getKey();
// List<String> split = StrUtil.split(key, '|');
// String str = split.get(0);
// String attributes = split.get(1);
// if (str.equals(pluginId)) {
// Element attributesElement = element.element(attributes);
// attributesElement.setText(entry.getValue().toString());
// }
// }
// }
// }
// //修改映射的pluginId
// for (Element element : stepList) {
// //获取插件ID
// String pluginId = element.elementTextTrim("type");
// //遍历结果集
// List<Map<String, Object>> pluginMapping = checkResultDto.getPluginMapping();
// for (Map<String, Object> result : pluginMapping) {
// Set<Map.Entry<String, Object>> entries = result.entrySet();
// for (Map.Entry<String, Object> entry : entries) {
// String key = entry.getKey();
// if (key.equals(pluginId)) {
// Element attributesElement = element.element("type");
// attributesElement.setText(entry.getValue().toString());
// }
// }
// }
// }
// if (transMeta.getRepository() != null &&
/// transMeta.getRepository().getClass().getName().equals("org.pentaho.di.repository.filerep.KettleFileRepository")) {
// //指定文件输出的位置
// FileOutputStream out = new FileOutputStream(filePath);
// // 指定文本的写出的格式：
// OutputFormat format = OutputFormat.createPrettyPrint(); //漂亮格式：有空格换行
// format.setTrimText(false);
// format.setEncoding("UTF-8");
// //1.创建写出对象
// XMLWriter writer = new XMLWriter(out, format);
// //2.写出Document对象
// writer.write(doc);
// //3.关闭流
// writer.close();
// } else {
// //指定文件输出的位置
// FileOutputStream out = new FileOutputStream(transMeta.getFilename());
// // 指定文本的写出的格式：
// OutputFormat format = OutputFormat.createPrettyPrint(); //漂亮格式：有空格换行
// format.setEncoding("UTF-8");
// format.setTrimText(false);
// //1.创建写出对象
// XMLWriter writer = new XMLWriter(out, format);
// //2.写出Document对象
// writer.write(doc);
// //3.关闭流
// writer.close();
// }
// Spoon.getInstance().getShell().getDisplay().asyncExec(new Runnable() {
// @Override
// public void run() {
// try {
// Spoon.getInstance().openFile(filePath, false);
// } catch (Exception ex) {
// ex.printStackTrace();
// }
//
// }
// });
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
//
//
// /**
// * 单个转换下载
// * @param activeTransGraph 当前选中的转换面板
// * @param transMeta 转换元数据
// * @param downloadBtn 下载按钮
// * @param coordinate 修饰
// * @param scrollLabelHeight 滚动标签高度
// * @param noteLabel 描述标签
// * @param client 客户端
// */
// private void downloadPlugin(TransGraph activeTransGraph, TransMeta transMeta, Button downloadBtn, int coordinate, int
/// scrollLabelHeight, Label noteLabel, String client) {
// //activeTransGraph = Spoon.getInstance().getActiveTransGraph();
// //过滤选中的插件
// if (pluginMap == null) {
// MessageBox mb = new MessageBox(this.getParent(), SWT.ICON_WARNING);
// mb.setMessage("下载失败,请勾选择你要下载的缺失插件");
// mb.setText("提示");
// mb.open();
// return;
// }
// if (!userService.isLogin()) {
// MissingTransDialog missingTransDialog = this;
//// this.shell.close();
// TransGraph finalActiveTransGraph = activeTransGraph;
// userCenter.login(new Func0<Object>() {
// @Override
// public Object call() throws Exception {
// missingTransDialog.downloadPlugin(finalActiveTransGraph, transMeta, downloadBtn, coordinate, scrollLabelHeight,
/// noteLabel, client);
// return null;
// }
// });
// return;
// }
//
// List<MissingTrans> missingTransList = new ArrayList<MissingTrans>();
//
// //多转换刷新流程
// //1:获取当前需要下载的转换
// //2对比和面板上的转换是否一致
// if (activeTransGraph.getTransMeta().getName().equals(transMeta.getName())) {
// missingTransList = activeTransGraph.getTransMeta().getMissingTrans();
// } else {
// missingTransList = transMeta.getMissingTrans();
// }
// //3下载完成后判断是否要重新加载。
// //加入数据库插件
// try {
// List<Map<String, Object>> dataBaseList = getDataBase(transMeta);
// if (CollectionUtils.isNotEmpty(dataBaseList)) {
// if (CollectionUtils.isEmpty(missingTransList)) {
// missingTransList = new ArrayList<>();
// }
// for (Map<String, Object> dataBase : dataBaseList) {
// String pluginId = (String) dataBase.get("pluginId");
// String version = (String) dataBase.get("version");
// MissingTrans missingTrans = new MissingTrans();
// missingTrans.setMissingPluginId(pluginId);
// missingTrans.setStepName(pluginId);
// StepMeta stepMeta = new StepMeta();
// stepMeta.setStepID(pluginId);
// if (StringUtils.isNotEmpty(version)) {
// stepMeta.setVersion(version);
// } else {
// stepMeta.setVersion(Const.DEFAULT_VERSION);
// }
// missingTrans.setParentStepMeta(stepMeta);
// missingTransList.add(missingTrans);
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// transMeta.setMissingTrans((ArrayList<MissingTrans>) missingTransList);
// Map<String, List<MissingTrans>> groupMissingTrans = Maps.newHashMap();
// //获取缺失的插件
// missingTransList.forEach(missingTrans -> {
// String pluginVersionId = missingTrans.getMissingPluginId();
// List<MissingTrans> subMissingTransList = groupMissingTrans.get(pluginVersionId);
// if (subMissingTransList == null) {
// subMissingTransList = Lists.newArrayList();
// groupMissingTrans.put(pluginVersionId, subMissingTransList);
// }
// subMissingTransList.add(missingTrans);
// });
//
// Map<String, List<MissingTrans>> listTransMissing = filterMissingTrans(groupMissingTrans, pluginMap);
// if (sum.compareTo(new BigDecimal(0.00)) == 1) {
//
// int ids = SWT.YES;
// MessageBox mbBuy = new MessageBox(this.getParent(), SWT.NO | SWT.YES | SWT.ICON_WARNING);
// mbBuy.setMessage("下载插件合计将会扣除" + sum + " 积分，如果已购买请忽略此信息，是否继续？");
// mbBuy.setText("提示");
// ids = mbBuy.open();
// //如果不购买
// if (ids != SWT.YES) {
// return;
// }
// }
//// 购买前取消判断积分足不足,否者已够买收费的也发下载
// HashMap<Object, Object> paramMapPoint = Maps.newHashMap();
// paramMapPoint.put("pluginMetaId", "");
// paramMapPoint.put("machineCode", JarValidate.MACHINE_CODE);
// String jsonStringPoint = JSONUtil.toJsonStr(paramMapPoint);
// HttpResponse httpResponse = HttpUtil.postJson(NetUrl.PLUGIN_STORE_INFO, jsonStringPoint);
// String body = httpResponse.body();
// PluginBuyInfoVo buyInfoVo = JSONUtil.toBean(body, PluginBuyInfoVo.class);
// BigDecimal balanceScore = buyInfoVo.getData().getBalanceScore();
// if (balanceScore.compareTo(sum) == -1&&balanceScore.compareTo(new BigDecimal(0.0))!=-1) {
// MessageBox mb = new MessageBox(this.getParent(), SWT.ICON_WARNING);
// mb.setMessage("你的当前积分不足,无法下载");
// mb.setText("提示");
// mb.open();
// return;
// }
// // 购买插件流程,已购买不影响，积分购买前足余与不足整体判断了，不存在中断与下载并列进行
// for (String missingPluginId : listTransMissing.keySet()) {
// JSONObject data = (JSONObject) pluginMap.get(missingPluginId);
// if (data != null) {
// if (data.get("charge_type").toString().equals("1") || data.get("charge_type").toString().equals("2")) {
// HashMap<Object, Object> paramMap = Maps.newHashMap();
// paramMap.put("pluginMetaId", missingPluginId);
// paramMap.put("machineCode", JarValidate.MACHINE_CODE);
// String jsonString = JSONUtil.toJsonStr(paramMap);
// HttpResponse buyPluginResult = HttpUtil.postJson(NetUrl.PLUGIN_STORE_BUY, jsonString);
// String buyPluginBody = buyPluginResult.body();
// JSONObject jsonObject = JSONUtil.parseObj(buyPluginBody);
// //下载
// if (!jsonObject.get("code").toString().equals("001000")) {
// MessageBox mb = new MessageBox(this.getParent(), SWT.NO | SWT.YES | SWT.ICON_WARNING);
// mb.setMessage(jsonObject.get("data").toString());
// mb.setText("提示");
// mb.open();
// return;
// } else {
// if (ObjectUtil.isNotEmpty(data.get("integral"))) {
// BigDecimal pluginIntegral = new BigDecimal((Double) data.get("integral"));
// if (!isBuyAlreadyByPluginMetaid(missingPluginId)) {
// sum = sum.subtract(pluginIntegral);
// }
// downloadLb.setText("当前选中插件预计需要" + sum + "积分");
// }
//
// }
// }
// }
//
// }
// // 下载并安装和刷新
// for (String missingPluginId : listTransMissing.keySet()) {
// List<MissingTrans> subMissingTransList = groupMissingTrans.get(missingPluginId);
// MissingTransInstallService service = new MissingTransInstallService(transMeta, activeTransGraph, missingPluginId,
// "", "StepPluginType",
// subMissingTransList);
// service.setOnSerialPortDataListener(new MissDialogUiListener() {
// @Override
// public void onDataReceived(AbstractMeta meta) {
// if (!shell.isDisposed()) {
// shell.getDisplay().asyncExec(new Runnable() {
// @SneakyThrows
// @Override
// public void run() {
// pluginGroup.dispose();
// refreshList(shellParent.getDisplay(), scrollLabelHeight, noteLabel, sysBlack, true);
// if (!mainPanel.isDisposed() && !pluginGroup.isDisposed()) {
// mainPanel.layout();
// pluginGroup.layout();
// }
// }
// });
// }
// }
// });
// String downLoadUrl = NetUrl.DOWNLOAD_PLUGIN + "?pluginMetaId="
// + missingPluginId + "&version=1.0.0&machArr=" + java.net.URLEncoder.encode(JarValidate.MACHINE_CODE);
// try {
// String res = HttpUtil.getString(downLoadUrl);
// Map<String, Object> resMap = JSONUtil.toBean(res, Map.class);
// if (resMap.containsKey("code")) {
// if (resMap.get("code").toString().equals("001015")) {
// MessageBox messageBox = new MessageBox(getParent());
// messageBox.setMessage("插件列表里" + missingPluginId + resMap.get("data").toString());
// messageBox.open();
// }
// }
// } catch (Exception ex) {
// }
// service.execute(subMissingTransList.get(0).getStepName(),
/// subMissingTransList.get(0).getParentStepMeta().getVersion());
//
// }
// }
//
//
// /**
// * 一键下载
// * @param activeTransGraph 当前激活的转换面板
// * @param transMeta 转换元数据
// * @param downloadBtn 下载按钮
// * @param coordinate 修饰数据
// * @param scrollLabelHeight 滚动高度
// * @param noteLabel 描述标签
// * @param client 客户端数据
// */
// private void downloadPluginByOneKey(TransGraph activeTransGraph, TransMeta transMeta, Button downloadBtn, int
/// coordinate, int scrollLabelHeight, Label noteLabel, String client) {
// //过滤选中的插件
// if (pluginMap == null) {
// MessageBox mb = new MessageBox(this.getParent(), SWT.ICON_WARNING);
// mb.setMessage("下载失败,请勾选择你要下载的缺失插件");
// mb.setText("提示");
// mb.open();
// return;
// }
// if (!userService.isLogin()) {
// MissingTransDialog missingTransDialog = this;
//// this.shell.close();
// TransGraph finalActiveTransGraph = activeTransGraph;
// userCenter.login(new Func0<Object>() {
// @Override
// public Object call() throws Exception {
// missingTransDialog.downloadPluginByOneKey(finalActiveTransGraph, transMeta, downloadBtn, coordinate,
/// scrollLabelHeight, noteLabel, client);
// return null;
// }
// });
// return;
// }
//
// List<MissingTrans> missingTransList = new ArrayList<MissingTrans>();
//
// //多转换刷新流程
// //1:获取当前需要下载的转换
// //2对比和面板上的转换是否一致
// if (activeTransGraph.getTransMeta().getName().equals(transMeta.getName())) {
// missingTransList = activeTransGraph.getTransMeta().getMissingTrans();
// } else {
// missingTransList = transMeta.getMissingTrans();
// }
// //3下载完成后判断是否要重新加载。
// //加入数据库插件
// try {
// List<Map<String, Object>> dataBaseList = getDataBase(transMeta);
// if (CollectionUtils.isNotEmpty(dataBaseList)) {
// if (CollectionUtils.isEmpty(missingTransList)) {
// missingTransList = new ArrayList<>();
// }
// for (Map<String, Object> dataBase : dataBaseList) {
// String pluginId = (String) dataBase.get("pluginId");
// String version = (String) dataBase.get("version");
// MissingTrans missingTrans = new MissingTrans();
// missingTrans.setMissingPluginId(pluginId);
// missingTrans.setStepName(pluginId);
// StepMeta stepMeta = new StepMeta();
// stepMeta.setStepID(pluginId);
// if (StringUtils.isNotEmpty(version)) {
// stepMeta.setVersion(version);
// } else {
// stepMeta.setVersion(Const.DEFAULT_VERSION);
// }
// missingTrans.setParentStepMeta(stepMeta);
// missingTransList.add(missingTrans);
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// transMeta.setMissingTrans((ArrayList<MissingTrans>) missingTransList);
// Map<String, List<MissingTrans>> groupMissingTrans = Maps.newHashMap();
// //获取缺失的插件
// missingTransList.forEach(missingTrans -> {
// String pluginVersionId = missingTrans.getMissingPluginId();
// List<MissingTrans> subMissingTransList = groupMissingTrans.get(pluginVersionId);
// if (subMissingTransList == null) {
// subMissingTransList = Lists.newArrayList();
// groupMissingTrans.put(pluginVersionId, subMissingTransList);
// }
// subMissingTransList.add(missingTrans);
// });
//
// Map<String, List<MissingTrans>> listTransMissing = filterMissingTrans(groupMissingTrans, pluginMap);
// if (sum.compareTo(new BigDecimal(0.00)) == 1 && missTransSize == missTransList.size()) {
// if (missTransSize > 1) {
// missTransSize--;
// }
//
// MessageBox mbBuy = new MessageBox(this.getParent(), SWT.NO | SWT.YES | SWT.ICON_WARNING);
// mbBuy.setMessage("下载插件合计将会扣除" + sum + " 积分，如果已购买请忽略此信息，是否继续？");
// mbBuy.setText("提示");
// id = mbBuy.open();
// //如果不购买
// if (id != SWT.YES) {
// Control[] children = pluginGroup.getChildren();
// for (Control child : children) {
// if (child instanceof Button) {
// Button button = (Button) child;
// String text = button.getText();
// if (StringUtils.isBlank(text)) {
// if (button.getEnabled()) {
// button.setSelection(false);
// }
// }
// }
// }
// selectBtn.setSelection(false);
// return;
// }
// } else if (sum.compareTo(new BigDecimal(0.00)) == 1 && missTransSize != missTransList.size() && id != SWT.YES) {
// return;
// }
// // 购买前取消判断积分足不足,否者已够买收费的也发下载
// HashMap<Object, Object> paramMapPoint = Maps.newHashMap();
// paramMapPoint.put("pluginMetaId", "");
// paramMapPoint.put("machineCode", JarValidate.MACHINE_CODE);
// String jsonStringPoint = JSONUtil.toJsonStr(paramMapPoint);
// HttpResponse httpResponse = HttpUtil.postJson(NetUrl.PLUGIN_STORE_INFO, jsonStringPoint);
// String body = httpResponse.body();
// PluginBuyInfoVo buyInfoVo = JSONUtil.toBean(body, PluginBuyInfoVo.class);
// BigDecimal balanceScore = buyInfoVo.getData().getBalanceScore();
// if (balanceScore.compareTo(sum) == -1&&balanceScore.compareTo(new BigDecimal(0.0))!=-1) {
// MessageBox mb = new MessageBox(this.getParent(), SWT.ICON_WARNING);
// mb.setMessage("你的当前积分不足,无法下载");
// mb.setText("提示");
// mb.open();
// return;
// }
// // 购买插件流程,已购买不影响，积分购买前足余与不足整体判断了，不存在中断与下载并列进行
// for (String missingPluginId : listTransMissing.keySet()) {
// JSONObject data = (JSONObject) pluginMap.get(missingPluginId);
// if (data != null) {
// if (data.get("charge_type").toString().equals("1") || data.get("charge_type").toString().equals("2")) {
// HashMap<Object, Object> paramMap = Maps.newHashMap();
// paramMap.put("pluginMetaId", missingPluginId);
// paramMap.put("machineCode", JarValidate.MACHINE_CODE);
// String jsonString = JSONUtil.toJsonStr(paramMap);
// HttpResponse buyPluginResult = HttpUtil.postJson(NetUrl.PLUGIN_STORE_BUY, jsonString);
// String buyPluginBody = buyPluginResult.body();
// JSONObject jsonObject = JSONUtil.parseObj(buyPluginBody);
// //下载
// if (!jsonObject.get("code").toString().equals("001000")) {
// MessageBox mb = new MessageBox(this.getParent(), SWT.NO | SWT.YES | SWT.ICON_WARNING);
// mb.setMessage(jsonObject.get("data").toString());
// mb.setText("提示");
// mb.open();
// return;
// } else {
// if (ObjectUtil.isNotEmpty(data.get("integral"))) {
// BigDecimal pluginIntegral = new BigDecimal((Double) data.get("integral"));
// if (!isBuyAlreadyByPluginMetaid(missingPluginId)) {
// sum = sum.subtract(pluginIntegral);
// }
// downloadLb.setText("当前选中插件预计需要" + sum + "积分");
// }
//
// }
// }
// }
//
// }
// // 下载并安装和刷新
// for (String missingPluginId : listTransMissing.keySet()) {
// List<MissingTrans> subMissingTransList = groupMissingTrans.get(missingPluginId);
// MissingTransInstallService service = new MissingTransInstallService(transMeta, activeTransGraph, missingPluginId,
// "", "StepPluginType",
// subMissingTransList);
// service.setOnSerialPortDataListener(new MissDialogUiListener() {
// @Override
// public void onDataReceived(AbstractMeta meta) {
// if (!shell.isDisposed()) {
// shell.getDisplay().asyncExec(new Runnable() {
// @SneakyThrows
// @Override
// public void run() {
// pluginGroup.dispose();
// refreshList(shellParent.getDisplay(), scrollLabelHeight, noteLabel, sysBlack, true);
// if (!mainPanel.isDisposed() && !pluginGroup.isDisposed()) {
// mainPanel.layout();
// pluginGroup.layout();
// }
// }
// });
// }
// }
// });
// String downLoadUrl = NetUrl.DOWNLOAD_PLUGIN + "?pluginMetaId="
// + missingPluginId + "&version=1.0.0&machArr=" + java.net.URLEncoder.encode(JarValidate.MACHINE_CODE);
// try {
// String res = HttpUtil.getString(downLoadUrl);
// Map<String, Object> resMap = JSONUtil.toBean(res, Map.class);
// if (resMap.containsKey("code")) {
// if (resMap.get("code").toString().equals("001015")) {
// MessageBox messageBox = new MessageBox(getParent());
// messageBox.setMessage("插件列表里" + missingPluginId + resMap.get("data").toString());
// messageBox.open();
// }
// }
// } catch (Exception ex) {
// }
// service.execute(subMissingTransList.get(0).getStepName(),
/// subMissingTransList.get(0).getParentStepMeta().getVersion());
// }
// }
//
// /**
// * 过滤非选择插件的插件数据
// * @param groupMissingTrans 所有缺失插件集合
// * @param pluginMap 选择缺失插件
// * @return 选中需要下载购买的插件集合数据
// */
// public Map<String, List<MissingTrans>> filterMissingTrans(Map<String, List<MissingTrans>> groupMissingTrans,
/// HashMap<String, Object> pluginMap) {
// List<String> pluginIdMissing = new ArrayList(groupMissingTrans.keySet());
// List<String> selectedPluginIds = new ArrayList(pluginMap.keySet());
// List<String> filterMissing = pluginIdMissing.stream().filter(e ->
/// selectedPluginIds.contains(e)).collect(Collectors.toList());
// Map<String, List<MissingTrans>> mapMissingTrans = new HashMap<>();
// for (String key : groupMissingTrans.keySet()) {
// if (filterMissing.contains(key)) {
// mapMissingTrans.put(key, groupMissingTrans.get(key));
// }
// }
// return mapMissingTrans;
// }
//
// /**
// * 加载转换元数据
// * @param transMeta 转换元数据
// * @return 转换元数据
// */
// public static TransMeta loadTransMeta(TransMeta transMeta) {
// try {
// if (transMeta.getRepository() != null) {
// Repository repository = transMeta.getRepository();
// ObjectId objectId = transMeta.getObjectId();
// transMeta = repository.loadTransformation(objectId, null);
// } else {
// transMeta = new TransMeta(transMeta.getFilename());
// }
// } catch (KettleException e) {
// LogUtil.warn("{},转换加载失败", e.getMessage());
// }
// return transMeta;
//
// }
//
// /**
// * 单复选框选中事件
// */
// class PointAdapter extends SelectionAdapter {
// @Override
// public void widgetSelected(SelectionEvent var1) {
// sum = new BigDecimal(0);
// Control[] children = pluginGroup.getChildren();
// pluginMap = Maps.newHashMap();
// for (Control child : children) {
// if (child instanceof Button) {
// Button button = (Button) child;
// if (button.getSelection()) {
// if (button.getData() != null && !(button.getData() instanceof Integer)) {
// JSONObject data = (JSONObject) button.getData();
// pluginMap.put((String) data.get("plugin_meta_id"), data);
// }
// }
// }
// }
// for (String entry : pluginMap.keySet()) {
// if (!userService.isLogin()) {
// userCenter.login(new Func0<Object>() {
// @Override
// public Object call() throws Exception {
// JSONObject data = (JSONObject) pluginMap.get(entry);
// BigDecimal integral = new BigDecimal(0);
// if (ObjectUtil.isNotEmpty(data.get("integral"))) {
// integral = new BigDecimal((Double) data.get("integral"));
// }
// if (!isBuyAlreadyByPluginMetaid(entry)) {
// sum = sum.add(integral);
// }
// return null;
// }
// });
// } else {
// JSONObject data = (JSONObject) pluginMap.get(entry);
// BigDecimal integral = new BigDecimal(0);
// if (ObjectUtil.isNotEmpty(data.get("integral"))) {
// integral = new BigDecimal((Double) data.get("integral"));
// }
// if (!isBuyAlreadyByPluginMetaid(entry)) {
// sum = sum.add(integral);
// }
//
// }
//
// }
// downloadLb.setText("当前选中插件预计需要" + sum + "积分");
//
// }
// }
//
// /**
// * 插件是否购买
// * @param plugin_meta_id 插件ID
// * @return 是否购买
// */
// public Boolean isBuyAlreadyByPluginMetaid(String plugin_meta_id) {
// HashMap<Object, Object> paramMapPoint = Maps.newHashMap();
// paramMapPoint.put("pluginMetaId", plugin_meta_id);
// paramMapPoint.put("machineCode", JarValidate.MACHINE_CODE);
// String jsonStringPoint = JSONUtil.toJsonStr(paramMapPoint);
// HttpResponse httpResponse = HttpUtil.postJson(NetUrl.PLUGIN_STORE_INFO, jsonStringPoint);
// String body = httpResponse.body();
// PluginBuyInfoVo buyInfoVo = JSONUtil.toBean(body, PluginBuyInfoVo.class);
// return buyInfoVo.getData().isBuy;
// }
// }
//
